//
//  模块化开发.h
//  面试题
//
//  Created by Toj on 8/15/21.
//


基于CTMediator的组件化方案:
https://casatwy.com/modulization_in_action.html
/京东组件化

iOS组件化实践: https://www.jianshu.com/p/2ff2a0cc9373?utm_campaign=shakespeare&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

#pragma mark - 问题?
1. 为什么使用组件
2. 什么是组件化
3. 怎么使用组件化

#pragma mark - 为什么使用组件
先看看项目一些问题
1. 业务模块划分不清楚，各模块之间耦合度很大，难以维护
例如: 我们公司的商城项目随着功能和时间, 代码量越来越大, 早期的一些代码已经不需要了, 但是不敢轻易删除, 不敢保证该文件是够有被使用.
就算手动去查找删除, 也是一件治标不治本的方法, 等过一段时间还会出现这种问题.
2. 所有模块代码都编写在一个项目中, 测试某个模块或功能的时候, 需要编译运行整个项目
这一点在做自动化测试的时候尤其明显, 如果某个地方出现问题, 现在就无法再继续进行测试了
3. 复用性不好, 需要经常造轮子
在我们的项目中, 如果之前的开发人员离职了, 那么他造过哪些轮子, 经常后续的开发人员是不了解不清楚的.
如果又需要做一些类似的功能,新的开发人员有需要重复造轮子
4. 开发效率很低, 分工不明确
如果有新人加入项目, 不能保证可以立刻投入开发.
需要较长的时间来熟悉代码, 且新人在熟悉代码的过程也容易走弯路.

组件化正好解决这些问题
开发中尽量做到 `高内聚, 低耦合`
1. 业务划分清晰, 新人接受项目容易, 不同的组件是不同的开发任务, 大组件下的小组件是一个小的开发任务
项目维护性更强, 需要什么功能, 很好找到, 提高了开发的销量.
2. 能够更好的发现问题并找到问题, 当某个地方出现问题了, 可以直接对该组件进行处理, 处理好了更新组件就好.
3. 开发和测试的时候, 可以只编译自己写的代码, 不需要编译全部项目.
4. 测试人员也可以测试单个组件

#pragma mark - 什么是组件化
一个分类可以是一个组件,
一个轮播图也可以是一个组件,
一个Controller也是一个组件,
一个首页模块(包含内部的所有Controller和业务)
甚至一些公共配置 都可以是一个组件,

说白了就是一个/ 一组功能的程序集, 为了使项目好维护, 易用, 简单而已, 分工明确

#pragma mark - 怎么使用组件化
开发后配置到git服务器上, 利用pod集成项目例
详细集成方案的请看【上面文章】
